package Text2;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
//        第一行包含两个整数 n 和 k，分别代表数组长度和滑动窗口的长度。
//        第二行有 n 个整数，代表数组的具体数值。
        StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        re.nextToken(); int n = (int)re.nval; // 输入n
        //int n = scan.nextInt();
        re.nextToken(); int k = (int)re.nval;//输入k
        //int k = scan.nextInt();
        int[] nums = new int[n];
        for(int i = 0 ; i < n ; i ++ ){
            re.nextToken(); nums[i] = (int)re.nval; //输入所有的数；
            //a[i] = scan.nextInt();
        }

        int[] q = new int[n];
        int hh=0,tt=-1;
        for (int i = 0; i < n; i++) {
            //如果当前队头在数组的下标小于当前窗口的最小下标，
            // 这个窗口就不包含这个元素了那么无论如何都要剔除队头这个元素
            while(hh<=tt&&q[hh]<i-k+1){
                hh++;
            }
            //保证单调性
            while(hh<=tt&&nums[q[tt]]>=nums[i]){
                tt--;
            }
            q[++tt]=i;
            if(i>=k-1){
                System.out.print(nums[q[hh]]+" ");
            }
        }
        System.out.println();
         hh=0;
         tt=-1;
        for (int i = 0; i < n; i++) {
            while(hh<=tt&&q[hh]<i-k+1){
                hh++;
            }
            //保证单调性
            while(hh<=tt&&nums[q[tt]]<=nums[i]){
                tt--;
            }
            q[++tt]=i;
            if(i>=k-1){
                System.out.print(nums[q[hh]]+" ");
            }
        }
    }
}
